// Dify工作流API服务

export interface DifyWorkflowRequest {
  query: string,
  response_mode: 'streaming' | 'blocking'
  user: string
}

export interface DifyStreamResponse {
  event: string
  data?: any
  message_id?: string
  conversation_id?: string
  task_id?: string
  workflow_run_id?: string
  created_at?: number
  id?: string
  answer?: string
  from_variable_selector?: string[]
}

/**
 * 调用Dify工作流流式接口
 * @param request 请求参数
 * @param onMessage 消息回调函数
 * @param onError 错误回调函数
 * @param onComplete 完成回调函数
 */
export async function callDifyWorkflowStream(
  request: DifyWorkflowRequest,
  onMessage: (data: DifyStreamResponse) => void,
  onError: (error: Error) => void,
  onComplete: () => void
): Promise<void> {
  try {
    console.log('发起Dify工作流请求:', request)
    
    // 在开发环境中使用代理路径
    // const apiUrl = import.meta.env.DEV 
    //   ? '/aiapi/v1/dify/chat-messages/stream'
    //   : 'http://localhost:6302/aiapi/v1/dify/chat-messages/stream';
    const apiUrl = import.meta.env.DEV 
      ? '/aiapi/v1/dify/chat-messages/stream'
      : 'http://47.109.177.78:6302/aiapi/v1/dify/chat-messages/stream';
    
    const response = await fetch(apiUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(request),
    })

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`)
    }

    if (!response.body) {
      throw new Error('响应体为空')
    }

    const reader = response.body.getReader()
    const decoder = new TextDecoder()

    try {
      while (true) {
        const { done, value } = await reader.read()
        
        if (done) {
          console.log('流式响应完成')
          onComplete()
          break
        }

        // 解码数据块
        const chunk = decoder.decode(value, { stream: true })
        console.log('接收到数据块:', chunk)
        
        // 处理可能包含多个JSON对象的数据块
        const lines = chunk.split('\n').filter(line => line.trim())
        
        for (const line of lines) {
          try {
            // 跳过空行和非JSON数据
            if (!line.trim() || !line.includes('{')) {
              continue
            }
            
            // 处理双重data前缀格式: data:data: {...}
            let jsonStr = line
            if (line.startsWith('data:data: ')) {
              jsonStr = line.substring(11) // 移除 'data:data: '
            } else if (line.startsWith('data: ')) {
              jsonStr = line.substring(6) // 移除 'data: '
            }
            
            const data = JSON.parse(jsonStr)
            onMessage(data)
          } catch (parseError) {
            console.warn('解析JSON失败:', parseError, '原始数据:', line)
            // 继续处理其他行，不中断整个流程
          }
        }
      }
    } finally {
      reader.releaseLock()
    }
  } catch (error) {
    console.error('Dify工作流请求失败:', error)
    onError(error instanceof Error ? error : new Error('未知错误'))
  }
}

/**
 * 生成用户ID
 */
export function generateUserId(): string {
  return 'user_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)
}

/**
 * 检查接口连通性
 */
export async function checkDifyApiHealth(): Promise<boolean> {
  try {
    // 在开发环境中使用代理路径
    // const apiUrl = import.meta.env.DEV 
    //   ? '/aiapi/v1/dify/chat-messages/stream'
    //   : 'http://localhost:6302/aiapi/v1/dify/chat-messages/stream';
    const apiUrl = import.meta.env.DEV 
      ? '/aiapi/v1/dify/chat-messages/stream'
      : 'http://47.109.177.78:6302/aiapi/v1/dify/chat-messages/stream';
      
    const response = await fetch(apiUrl, {
      method: 'OPTIONS',
    })
    return response.ok
  } catch {
    return false
  }
}